package com.xbongbong.formula.qlexpress.operator.date;

import com.ql.util.express.Operator;
import com.xbongbong.formula.constant.Constant;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.util.PaasDateUtil;
import com.xbongbong.pro.enums.ErrorCodeEnum;
import com.xbongbong.pro.enums.errorcodes.BusinessRuleErrorCodeEnum;
import com.xbongbong.saas.constant.BasicConstant;
import org.apache.commons.lang3.StringUtils;

import java.util.Objects;

/**
 * 返回指定日期date为星期几
 * @author 吴峰
 * @version v1.0
 * @date 2019/12/30 16:53 
 * @since v1.0
 */
public class OperatorWeekNum extends Operator {

    public OperatorWeekNum(String name){
        this.name = name;
    }

    public OperatorWeekNum(String aliasName, String aName, String errorInfo){
        this.aliasName = aliasName;
        this.name = aName;
        this.errorInfo = errorInfo;
    }


    /**
     * 语法：WEEKNUM(date)
     * 说明：返回一个数字，该数字代表指定日期date是一年中的第几周
     * 例如：根据系统生成的创建时间，通过WEEKNUM函数自动填入【周】。
     * @param list
     * list[0] 必需。指定日期。代表一周中的日期。应使用DATE函数输入日期，或者将日期作为其他公式或函数的结果输入
     * list[1]  可选。一数字，确定星期从哪一天开始。默认值为1
     * @return
     * @throws Exception
     */
    @Override
    public Object executeInner(Object[] list) throws XbbException {
        if (Objects.isNull(list)) {
            throw new XbbException(BusinessRuleErrorCodeEnum.API_ERROR_261007);
        }
        if (list[0] == null || StringUtils.equals(list[0].toString(), Constant.ZERO_STRING)) {
            return null;
        }
        Long startTime = PaasDateUtil.getInt(list[0]);
        Integer value = 1;
        if (list.length == BasicConstant.TWO && Objects.nonNull(list[1]) && list[1] instanceof Integer) {
            value = Integer.valueOf(String.valueOf(list[1]));
        }
        return PaasDateUtil.getWeekNum(startTime, value);
    }
}
